package demo1;

/**
 * @User: vitobo
 * @Date: 2024-05-24
 * @Description:
 */


/**
 * 抽象类:
 *  1.使用abstract修饰类
 *  2.抽象类当中 可以包含普通类所能包含的成员
 *  3.抽象类和普通类 不一样的是 抽象类当中可以包含抽象的方法
 *  4.抽象方法是使用abstract修饰的, 这个方法没有具体的实现
 *  5.不能实例化抽象类
 *  6.抽象类存在的最大意义就是能被继承
 *  7.如果一个普通类 继承了一个抽象类, 此时必须重写抽象类当中的抽象方法
 *  8.如果一个抽象类A继承了一个抽象类B, 此时A当中 不需要重写B当中的抽象方法. 但是如果A再被普通类继承,就需要重写
 *  9.抽象方法不能是 私有的.(抽象方法的出现就是为了被重写) 同时也满足重写的规则
 *  10.final和abstract 不可以一起使用, static也不可以
 *  11.抽象类当中, 可以有构造方法, 为了方便子类能够调用, 来初始化抽象类当中的成员.
 *
 *  其实很多语法的出现, 都是为了方便程序员很早的发现问题
 *
 */

abstract class Shape{
    public static int a = 10;

    // 抽象方法
    public abstract void draw();

    public void func(){}

}

class Rect extends Shape{
    @Override
    public void draw(){
        System.out.println("矩形!!");
    }


}

public class Test {
    public static void drawMap(Shape shape){

    }


    public static void main(String[] args) {
        Shape shape = new Rect();


    }
}
